Маятник Петра

Трехзвенный

g = 9.81; m1 = 1; m2 = 1; m3 = 1; l1 = 1; l2 = 1; l3 = 1; timeMax = 30; eqns = { (m1 + m2 + m3) l1^2 \[Theta]1''[t] + (m2 + m3) l1 l2 \[Theta]2''[t] Cos[\[Theta]1[t] - \[Theta]2[t]] + m3 l1 l3 \[Theta]3''[t] Cos[\[Theta]1[t] - \[Theta]3[t]] + (m2 + m3) l1 l2 \[Theta]2'[t]^2 Sin[\[Theta]1[t] - \[Theta]2[t]] + m3 l1 l3 \[Theta]3'[t]^2 Sin[\[Theta]1[t] - \[Theta]3[t]] + g (m1 + m2 + m3) l1 Sin[\[Theta]1[t]] == 0, (m2 + m3) l2^2 \[Theta]2''[t] + (m2 + m3) l1 l2 \[Theta]1''[t] Cos[\[Theta]1[t] - \[Theta]2[t]] + m3 l2 l3 \[Theta]3''[t] Cos[\[Theta]2[t] - \[Theta]3[t]] - (m2 + m3) l1 l2 \[Theta]1'[t]^2 Sin[\[Theta]1[t] - \[Theta]2[t]] + m3 l2 l3 \[Theta]3'[t]^2 Sin[\[Theta]2[t] - \[Theta]3[t]] + g (m2 + m3) l2 Sin[\[Theta]2[t]] == 0, m3 l3^2 \[Theta]3''[t] + m3 l1 l3 \[Theta]1''[t] Cos[\[Theta]1[t] - \[Theta]3[t]] + m3 l2 l3 \[Theta]2''[t] Cos[\[Theta]2[t] - \[Theta]3[t]] - m3 l1 l3 \[Theta]1'[t]^2 Sin[\[Theta]1[t] - \[Theta]3[t]] - m3 l2 l3 \[Theta]2'[t]^2 Sin[\[Theta]2[t] - \[Theta]3[t]] + g m3 l3 Sin[\[Theta]3[t]] == 0 }; initCond = { \[Theta]1[0] == \[Pi]/2 - 0.1, \[Theta]2[0] == \[Pi], \[Theta]3[0] == \[Pi], \[Theta]1'[0] == 0, \[Theta]2'[0] == 0, \[Theta]3'[0] == 0 }; sol = NDSolve[{eqns, initCond}, {\[Theta]1, \[Theta]2, \[Theta]3}, {t, 0, timeMax}]; x1[t_] := l1 Sin[\[Theta]1[t] /. First[sol]]; y1[t_] := -l1 Cos[\[Theta]1[t] /. First[sol]]; x2[t_] := x1[t] + l2 Sin[\[Theta]2[t] /. First[sol]]; y2[t_] := y1[t] - l2 Cos[\[Theta]2[t] /. First[sol]]; x3[t_] := x2[t] + l3 Sin[\[Theta]3[t] /. First[sol]]; y3[t_] := y2[t] - l3 Cos[\[Theta]3[t] /. First[sol]]; trajectories = Table[{{x1[t], y1[t]}, {x2[t], y2[t]}, {x3[t], y3[t]}}, {t, 0, timeMax, 0.05}]; trajectories = trajectories // Transpose; Анимируем

Module[{points, tracks}, Animate[ Graphics[ { Thick, Black, Line[{{0, 0}, points[[1]], points[[2]], points[[3]]} // Offload], Blue, PointSize[0.03], Point[points[[1]] // Offload], Red, PointSize[0.03], Point[points[[2]] // Offload], Green, PointSize[0.04], Point[points[[3]] // Offload], Directive[TransitionType->None], {Green, Opacity[0.15], Line[tracks[[3]] // Offload ]}, {Red, Opacity[0.15], Line[tracks[[2]] // Offload ]}, {Blue, Opacity[0.15], Line[tracks[[1]] // Offload ]} }, PlotRange -> {{-3.5, 3.5}, {-3.5, 0.5}}, Axes -> True, Frame->True, Background -> White, ImageSize -> 450 ], {t, 0, timeMax, 0.05}, AnimationRate -> 30, "UpdateFunction" -> Function[t, tracks = trajectories[[All, ;; Floor[t / 0.05] + 1]]; points = {{x1[t], y1[t]}, {x2[t], y2[t]}, {x3[t], y3[t]}}; False ] ] ]